cmake_minimum_required(VERSION 3.0)
project(hunspell)

#get hunspell version
file(STRINGS "configure.ac" CONFIGURE_AC_INIT REGEX "AC_INIT\\(\\[hunspell\\],\\[.*\\].*" )
string(REGEX REPLACE "AC_INIT\\(\\[.*\\],\\[([0-9]+\\.[0-9]+\\.[0-9]+)\\].*" "\\1"  VERSION ${CONFIGURE_AC_INIT})
message(STATUS "Hunspell version: ${VERSION}")

option(BUILD_SHARED_LIBS "Build shared libs" OFF)
option(ENABLE_NLS "Define if translation of program messages to the user's native language is requested" OFF)
option(HUNSPELL_WARNING_ON "Define if you need warning messages" OFF)

if(NOT BUILD_SHARED_LIBS)
    add_definitions(-DHUNSPELL_STATIC)
endif()

if(MSVC)
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()

include_directories("src/hunspell")
include_directories("src/parsers")

#libhunspell
set(LIBHUNSPELL_SRCS
    src/hunspell/affentry.cxx
    src/hunspell/affixmgr.cxx
    src/hunspell/csutil.cxx
    src/hunspell/hashmgr.cxx
    src/hunspell/hunspell.cxx
    src/hunspell/suggestmgr.cxx
    src/hunspell/phonet.cxx
    src/hunspell/filemgr.cxx
    src/hunspell/hunzip.cxx
    src/hunspell/replist.cxx
    src/hunspell/affentry.hxx
    src/hunspell/htypes.hxx
    src/hunspell/affixmgr.hxx
    src/hunspell/csutil.hxx
    src/hunspell/atypes.hxx
    src/hunspell/suggestmgr.hxx
    src/hunspell/baseaffix.hxx
    src/hunspell/hashmgr.hxx
    src/hunspell/langnum.hxx
    src/hunspell/phonet.hxx
    src/hunspell/filemgr.hxx
    src/hunspell/hunzip.hxx
    src/hunspell/replist.hxx
)

set(LIBHUNSPELL_HDRS
    src/hunspell/hunspell.hxx 
    src/hunspell/hunspell.h 
    src/hunspell/hunvisapi.h
    src/hunspell/w_char.hxx 
    src/hunspell/atypes.hxx 
    src/hunspell/csutil.hxx
    src/hunspell/htypes.hxx
)

#hunspell/libhunspell
add_library(libhunspell ${LIBHUNSPELL_HDRS} ${LIBHUNSPELL_SRCS})

#Avoid automatically added lib prefix 'lib' for hunspell
set_target_properties(libhunspell PROPERTIES PREFIX "")

target_compile_definitions(libhunspell PRIVATE -DBUILDING_LIBHUNSPELL)
install(TARGETS libhunspell
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib
    RUNTIME DESTINATION bin
)

#parsers/libparsers
set(LIBPARSERS_SRCS
    src/parsers/firstparser.cxx
    src/parsers/xmlparser.cxx
    src/parsers/latexparser.cxx
    src/parsers/manparser.cxx
    src/parsers/textparser.cxx
    src/parsers/htmlparser.cxx
    src/parsers/odfparser.cxx
)
add_library(libparsers OBJECT ${LIBPARSERS_SRCS})

#parsers/testparser
set(TESTPARSER_SRCS
    src/parsers/firstparser.cxx
    src/parsers/firstparser.hxx
    src/parsers/xmlparser.cxx
    src/parsers/xmlparser.hxx
    src/parsers/latexparser.cxx
    src/parsers/latexparser.hxx
    src/parsers/manparser.cxx 
    src/parsers/manparser.hxx
    src/parsers/testparser.cxx
    src/parsers/textparser.cxx
    src/parsers/textparser.hxx
    src/parsers/htmlparser.cxx
    src/parsers/htmlparser.hxx
    src/parsers/odfparser.hxx
    src/parsers/odfparser.cxx
)

if(NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND CMAKE_BUILD_TYPE STREQUAL "Release" AND BUILD_TOOLS)
    add_executable(testparser ${TESTPARSER_SRCS})
    target_link_libraries(testparser libhunspell)

    #tools/analyze
    add_executable(analyze "src/tools/analyze.cxx")
    target_link_libraries(analyze libhunspell)

    #tools/chmorph
    add_executable(chmorph "src/tools/chmorph.cxx" $<TARGET_OBJECTS:libparsers>)
    target_link_libraries(chmorph libhunspell)

    #tools/hunspell
    include(CheckIncludeFile)
    check_include_file("curses.h" HAVE_CURSES_H)
    check_include_file("langinfo.h" HAVE_LANGINFO_CODESET)
    check_include_file("libintl.h" HAVE_LIBINTL_H)
    check_include_file("locale.h" HAVE_LOCALE_H)
    check_include_file("ncursesw/curses.h" HAVE_NCURSESW_H)
    check_include_file("unistd.h" HAVE_UNISTD_H)
    configure_file("config.h.in" "config.h")

    add_executable(hunspell "src/tools/hunspell.cxx" $<TARGET_OBJECTS:libparsers>)
    target_include_directories(hunspell PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
    target_link_libraries(hunspell libhunspell)

    #tools/munch
    add_executable(munch "src/tools/munch.cxx")

    #tools/unmunch
    add_executable(unmunch "src/tools/unmunch.cxx")

    #tools/hzip
    #add_executable(hzip "src/tools/hzip.cxx")
    #target_link_libraries(hzip libhunspell)

    #tools/hunzip
    add_executable(hunzip "src/tools/hunzip.cxx")
    target_link_libraries(hunzip libhunspell)

    install(
        TARGETS
            hunspell 
            testparser
            analyze
            chmorph
            munch
            unmunch
        #    hzip
            hunzip 
        DESTINATION tools/hunspell
    )
endif()

install(FILES ${LIBHUNSPELL_HDRS} DESTINATION "include/hunspell/")
